Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

Programación con Paralelismo Implícito (página 2)




Enviado por Pablo Turmero



Partes: 1, 2, 3

Monografias.com
Una pragma, en C o C++, es una directiva al compilador.

La sintaxis es
#pragma omp

Ejemplo:
#pragma omp parallel for
le dice al compilador que trate a paralelizar el bucle for que sigue, por tanto, el compilador tiene que verificar que cuando se ejecuta, habrá disponible la información necesaria para llevar a cabo las iteraciones

OpenMP Conceptos básicos

Monografias.com
Ejemplo
#include
#include

int main (int argc, char *argv[]) {
int p,th_id;
p=omp_get_num_procs();
omp_set_num_threads(p);
#pragma omp parallel private(th_id);
{
th_id = omp_get_thread_num();
printf("Hello World from thread %dn", th_id);
}
return 0;
}

OpenMP Conceptos básicos

Monografias.com
El contexto de ejecución
Todo hilo tiene un contexto de ejecutación, que consiste en el espacio de direcciones que el hilo puede acceder
El contexto de ejecutación incluye variables estáticas, estructuras dinámicamente asignadas, etc
OpenMP Conceptos básicos

Monografias.com
OpenMPParalelismo de datos
Características generales de cláusulas de datos:
Especifican propiedades “paralelas” de las variables
Pueden aparecer tantas veces como sea necesario
Pueden usarse con cualquier directiva OpenMP

Restricciones generales de cláusulas de datos:
Una variable no puede aparecer en más de una cláusula
Sólo admiten variables que sean visibles desde la subrutina o función que incluya la cláusula

Monografias.com
Variables compartidas y Variables privadas
Una variable compartida tiene la misma dirección en el contexto de ejecutación de cada hilo.
Una variable privada tiene una dirección distinta en el contexto de ejecutación de cada hilo.
Un hilo no puede acceder a las variables privadas de otro hilo.

OpenMP Paralelismo de datos

Monografias.com
OpenMPParalelismo de datos
La cláusula SHARED
Especifica que una variable es compartida por las tareas:
#pragma omp parallel for SHARED( c,d)
o
! $OMP PARALLEL SHARED (c,d)

! $OMP END PARALLEL

Monografias.com
OpenMPParalelismo de datos
La cláusula SHARED
Características de las variables compartidas:
Todas las tareas ven su contenido
Todas las tareas pueden cambiar su contenido
Todas las tareas ven los cambios realizados
Peculiaridades de las variables compartidas:
Los cambios no son inmediatos (cache coherency)
Pueden requerir de sincronía entre tareas
Existen algunas limitaciones en Fortran

Monografias.com
OpenMPParalelismo de datos
La cláusula PRIVATE
Especifica que una variable es privada a cada tarea:
#pragma omp parallel for PRIVATE(a,b )
o
! $OMP PARALLEL PRIVATE (a,b)

! $OMP END PARALLEL

Monografias.com
OpenMPParalelismo de datos
La cláusula PRIVATE
Características de las variables privadas:
Cada tarea tiene su propia versión de la variable
Eso se consigue replicando la variable en memoria
Las otras tareas no pueden ver su contenido
Peculiaridades de las variables privadas:
Su valor inicial no está definido
Tras la región paralela su valor tampoco está definido
Existen algunas limitaciones

Monografias.com
Variables privadas

for (i = 0; i < BLOCK_SIZE(id,p,n); i++)
for (j = 0; j < n; j++)
a[i][j] = MIN(a[i][j],a[i][k]+tmp[j]);

Cualquier de los bucles se podria ejecutar en paralelo
Es mejor paralelizar el bucle exterior para reducir el número de forks/joins
Todas las variables excepto el indice son compartidas.
Deberiamos dar cada hilo su copia privada de j

OpenMP Conceptos básicos

Monografias.com
Variables privadas

#pragma omp parallel for private(j)
for (i = 0; i < BLOCK_SIZE(id,p,n); i++)
for (j = 0; j < n; j++)
a[i][j] = MIN(a[i][j],a[i][k]+tmp[j]);

Cualquier de los bucles se podria ejecutar en paralelo
Es mejor paralelizar el bucle exterior para reducir el número de forks/joins
Todas las variables excepto el indice son compartidas.
Deberiamos dar cada hilo su copia privada de j

OpenMP Conceptos básicos

Monografias.com
OpenMPParalelismo de datos
La cláusula DEFAULT
Especifica el comportamiento por defecto:

#pragma omp parallel for DEFAULT( PRIVATE ) SHARED (a)
o

! $OMP PARALLEL DEFAULT ( PRIVATE ) SHARED (a)

! $OMP END PARALLEL

Monografias.com
OpenMPParalelismo de datos
La cláusula DEFAULT
Características de la cláusula:
Sólo puede aparecer una única vez en cada directiva
Admite tres opciones: PRIVATE, SHARED y NONE
Con NONE todas las variables deben ser definidas
Sólo afecta a las variables directamente visibles:
Las variables definidas dentro de la subrutina ejemplo no se ven afectadas por la cláusula DEFAULT

Monografias.com
firstprivate()
Es una extensiónd e la cláusula PRIVATE
Se usa para crear una variable privada que tiene su valor inicial igual al valor de la variable controlada por el hilo maestro cuando se entra el bucle.
Si un hilo cambia el valor de una variable en alguna iteración, entonces este valor será el valor de la variable en iteraciones subsecuentes

OpenMP Conceptos básicos

Monografias.com
firstprivate()
x[0] = complex_function();
for (i-0;j<4;j++)
x[j]=g(I,x[j-1]);
answer[i] = x[i] – x[j];
}
Se puede hacer el bucle exterior paralelo si hacemos j y x privadas. Sin embargo, x[0] se necesita en la primera iteración del bucle interior.
OpenMP Conceptos básicos

Monografias.com
firstprivate()
Se podría mover la inicialización de x[0] dentro del bucle anterior, pero es caro.
Mejor:

x[0] = complex_function();
#pragma op parallel for private[j] firstprivate(x)
for (i-0;j<4;j++)
x[j]=g(I,x[j-1]);
answer[i] = x[i] – x[j];
}

OpenMP Conceptos básicos

Monografias.com
OpenMPParalelismo de datos
La cláusula FIRSTPRIVATE
Características de las variables FIRSTPRIVATE:
Cada tarea tiene su propia versión de la variable
Eso se consigue replicando la variable en memoria
Las otras tareas no pueden ver su contenido
Su valor es inicializado con la variable original
Peculiaridades de las variables FIRSTPRIVATE:
Tras la región paralela su valor no está definido

Monografias.com
La cláusula LASTPRIVATE
La cláusula se usa para copiar el valor privado del hilo que ejecutó la última iteración a la copia del hilo maestro

OpenMP Conceptos básicos

Monografias.com
OpenMPParalelismo de datos
Resumen de cláusulas de datos
Cláusulas de datos vistas:
SHARED, PRIVATE, DEFAULT, FIRSTPRIVATE
Cláusulas de datos adicionales:
LASTPRIVATE, REDUCTION, COPYIN, COPYPRIVATE
Condiciones generales a tener en cuenta:
Una variable sólo puede aparecer en una cláusula, salvo en FIRSTPRIVATE y LASTPRIVATE, a la vez
El contador de un bucle siempre es privado
Cada cláusula tiene sus limitaciones

Monografias.com
OpenMPDirectivas distribución de trabajo
Características de estas directivas:
Distribuyen una carga de trabajo sobre varias tareas
No crean nuevas tareas, usan las ya existentes
Funcionan en regiones seriales y en regiones paralelas
Incluyen al final una sincronización implicita
Restricciones de estas directivas:
Deben ser encontradas por todas las tareas
Sólo pueden contener bloques estructurados de código

Partes: 1, 2, 3
 Página anterior Volver al principio del trabajoPágina siguiente 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter